package com.halden.mycache.core;

import com.halden.mycache.core.Impl.CacheValue;
import com.halden.mycache.support.aop.CacheInterceptor;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * @Author: halden
 * @Data:2023/2/4 10:17
 * @Description: 过期接口，实现该接口的缓存类将拥有过期功能
 * @since 0.0.2
 */
public interface ICacheExpire<K,V> {

    /**
     * 带过期时间长度的添加
     * @param key
     * @param value
     * @param time
     * @param unit
     * @return
     * @since 0.0.2
     */
    @CacheInterceptor
    CacheValue<V> put(K key, V value, long time, TimeUnit unit);

    /**
     * 带过期时间的添加
     * @param key
     * @param value
     * @param expireTime
     * @return
     * @since 0.0.2
     */
    @CacheInterceptor
    CacheValue<V> put(K key, V value, Date expireTime);

    /**
     * 设置过期时间长度的方法
     * @param key
     * @param time
     * @param unit
     * @since 0.0.2
     */
    @CacheInterceptor
    void expire(K key, long time, TimeUnit unit);

    /**
     * 设置过期时间的方法
     * @param key
     * @param expireTime
     * @since 0.0.2
     */
    @CacheInterceptor
    void expireAt(K key, Date expireTime);

    /**
     * 检查元素是否过期
     * @param key
     * @param cacheValue
     * @since 0.0.2
     */
    boolean checkExpire(K key, CacheValue<V> cacheValue);
}
